import * as vscode from "vscode";
import * as command from "@ap/command";
import { setLogin } from "@ap/util/request";
import checkDts from "@ap/util/mapFile/checkDts";
import checkSnippets from "@ap/util/vscode/checkSnippets";
import { delTempFolder } from "@ap/util/vscode/tempFile";
import { componentUsageProvider } from "@ap/util/mapFile/componentUsageProvider";
import { checkNodeEnvironment } from "@ap/util/vscode/checkNodeEnv";

//初始化模块。
export async function init(context: vscode.ExtensionContext) {
  checkNodeEnvironment(context);

  CreateStatusBar.init(context);
  setLogin();
  await delTempFolder();
  checkDts(false);
  checkSnippets();
  componentUsageProvider();
}

/**
 * 创建状态栏的类
 * 提供初始化状态栏项的方法和创建具体状态栏项的私有方法
 */
export class CreateStatusBar {
  // 状态栏的默认颜色
  static STATUS_BAR_COLOR = "#ff8100";
  // 成功状态的颜色
  static STATUS_SUCCESS_COLOR = "#00ff00";
  // 警告状态的颜色
  static STATUS_WARN_COLOR = "#FF0022";
  // 用户中心工具的状态栏项对象
  static userCenterToolObj: vscode.StatusBarItem;
  // 构建工具的状态栏项对象
  static buildToolObj: vscode.StatusBarItem;
  // 构建HMR工具的状态栏项对象
  static buildHMRToolObj: vscode.StatusBarItem;

  static buildHMRToolObj_reStartText =
    "开启当前项目热模块替换（HMR）服务器，实时编译Arena-Ts项目并同步至神岛编辑器中。\n\n---\n[$(debug-alt) 启动](command:ap.file.hmr.reStart) —— 读取`webpack`及`dao3config`文件配置并启动HMR服务器。";

  static buildHMRToolObj_stopText =
    "[$(debug-console) 日志](command:ap.file.outputLog)\n\n[$(debug-restart) 重启](command:ap.file.hmr.reStart) —— 重新读取`webpack`及`dao3config`文件配置并重启HMR服务器。\n\n[$(debug-disconnect) 关闭](command:ap.file.hmr.stop) —— 彻底关闭HMR服务器，不再进行实时编译。";

  static buildToolObj_text =
    "完整构建当前Arena-Ts项目，并转换成Arena-Js项目并同步神岛编辑器中。\n\n---\n[$(extensions-editor-label-icon) 配置链接地图信息](command:ap.file.mapTool) —— 快速配置编译后文件需要上传的地图。\n\n[$(output) 选择需编译文件信息](command:ap.file.outputName) —— 快捷选择需编译的入口文件及输出名称。\n\n---\n[打开`服务端`ts配置](command:ap.file.tsconfig.open.server) —— [打开`客户端`ts配置](command:ap.file.tsconfig.open.client)\n\n[打开`服务端`wp配置](command:ap.file.webpackconfig.open.server) —— [打开`客户端`wp配置](command:ap.file.webpackconfig.open.client)\n\n[打开`服务端`入口文件](command:ap.file.dao3config.open.server) —— [打开`客户端`入口文件](command:ap.file.dao3config.open.client)";

  /**
   * 初始化状态栏项
   * @param context VS Code扩展上下文，用于管理状态栏项的生命周期
   */
  static init(context: vscode.ExtensionContext) {
    // 如果用户中心工具的状态栏项尚未创建，则创建它
    if (!this.userCenterToolObj) {
      this.userCenterToolObj = this.createUserCenterTool();
    }
    // 如果构建工具的状态栏项尚未创建，则创建它
    if (!this.buildToolObj) {
      this.buildToolObj = this.createBuildTool();
    }
    // 如果HMR构建工具的状态栏项尚未创建，则创建它
    if (!this.buildHMRToolObj) {
      this.buildHMRToolObj = this.createHMRBuildTool();
    }
    context.subscriptions.push(
      this.userCenterToolObj,
      this.buildToolObj,
      this.buildHMRToolObj
    );
  }

  /**
   * 创建用户中心工具的状态栏项
   * @returns 创建的用户中心工具状态栏项对象
   */
  private static createUserCenterTool() {
    // 创建状态栏项并设置其属性
    const toolObj = this.createStatusBarItem(
      vscode.StatusBarAlignment.Right,
      100
    );
    toolObj.text = "$(arena-icon)";
    toolObj.command = command.CommandId.userCenterTool_showBar;
    toolObj.color = this.STATUS_BAR_COLOR;
    toolObj.show();
    return toolObj;
  }

  /**
   * 创建构建工具的状态栏项
   * @returns 创建的构建工具状态栏项对象
   */
  private static createBuildTool() {
    // 创建状态栏项并设置其属性
    const toolObj = this.createStatusBarItem(vscode.StatusBarAlignment.Left, 0);
    toolObj.text = "$(arena-up-icon) 完整构建项目";
    const toip = new vscode.MarkdownString(this.buildToolObj_text, true);
    toip.isTrusted = true;
    toolObj.tooltip = toip;
    toolObj.command = command.CommandId.file_buildNUpload;
    toolObj.show();
    return toolObj;
  }

  /**
   * 创建HMR构建工具的状态栏项
   * @returns 创建的构建工具状态栏项对象
   */
  private static createHMRBuildTool() {
    // 创建状态栏项并设置其属性
    const toolObj = this.createStatusBarItem(vscode.StatusBarAlignment.Left, 1);
    const toip = new vscode.MarkdownString(
      this.buildHMRToolObj_reStartText,
      true
    );
    toip.isTrusted = true;
    toolObj.text = "$(arena-flash-icon) HMR";
    toolObj.tooltip = toip;
    toolObj.color = this.STATUS_BAR_COLOR;
    toolObj.show();
    return toolObj;
  }

  /**
   * 创建状态栏项的通用方法
   * @param alignment 状态栏项的对齐方式
   * @param priority 状态栏项的优先级，决定其显示顺序
   * @returns 创建的状态栏项对象
   */
  private static createStatusBarItem(
    alignment: vscode.StatusBarAlignment,
    priority: number
  ): vscode.StatusBarItem {
    // 创建并返回状态栏项对象
    const toolObj = vscode.window.createStatusBarItem(alignment, priority);
    return toolObj;
  }
}
import { exec } from "child_process";

function checkGitCommand(context: vscode.ExtensionContext) {
  exec("git --version", (error, stdout, stderr) => {
    if (error) {
      vscode.window.showErrorMessage(
        "Git is not installed or not available in PATH."
      );
      console.error("Git check error:", stderr);
      return;
    }
    vscode.window.showInformationMessage(`Git is available: ${stdout.trim()}`);
  });
}
